/**
 * 
 */
package cn.dgfy.MyBatisStudy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import cn.dgfy.MyBatisStudy.bean.Student;

/**
 * @author Tearfalls
 *
 */
public interface StudentMapperDynamicSQL {
	
	/*
	 * 批量保存学生信息，单条插入语句批量插入，以foreach标签实现
	 */
	public void addByStudentForeach1(@Param("students") List<Student> students);
	
	/*
	 * 批量保存学生信息，多条插入语句，每条插入语句插入一条记录，以foreach标签实现
	 */
	public void addByStudentForeach2(@Param("students") List<Student> students);
	
	/*
	 * 参常用的，具有一定共性的SQL映射片段抽取出来并在需要处引用，从而达到代码重用的效果，以sql标签实现
	 */
	public void addByStudentSQL(Student student);
	
	/*
	 * 更新学生信息，参数对象中携带了哪些字段，就更新数据库中的哪些字段，以set标签实现
	 */
	public void modifySet(Student student);
	
	/*
	 * 更新学生信息，参数对象中携带了哪些字段，就更新数据库中的哪些字段，以trim标签实现
	 */
	public void modifyTrim(Student student);
	
	/*
	 * 查询学生信息，参数对象中携带了哪些字段，就将这些字段做为查询条件。以if标签实现
	 */
	public List<Student> getByStudentIf(Student student);
	
	/*
	 * 查询学生信息，参数对象中携带了哪些字段，就将这些字段做为查询条件。以where标签 + if标签实现
	 */
	public List<Student> getByStudentWhereIf(Student student);
	
	/*
	 * 查询学生信息，参数对象中携带了哪些字段，就将这些字段做为查询条件。以trim标签 + if标签实现
	 */
	public List<Student> getByStudentTrimIf(Student student);
	
	/*
	 * 查询学生信息，参数对象中携带若干字段，就按指定顺序选用其中一个字段做为查询条件。以choose标签 + when标签 + otherwise标签实现
	 */
	public List<Student> getByStudentChoose(Student student);
	
	/*
	 * 查询学生信息，通过使用MyBatis内置参数来决定一些映射行为
	 */
	public List<Student> getByStudentInnerParameter(Student student);
	
	/*
	 * 查询学生信息，通过使用参数对象的realName字段作为查询参数来进行模糊查询
	 */
	public List<Student> getByStudentRealNameBind(Student student);
	
	/*
	 * 查询学生信息，通过遍历参数对象（列表）来构建查询条件，以foreach标签实现
	 */
	public List<Student> getByIdForeach(@Param("ids") List<Integer> ids);
	
}
